package lkx.demo.test1;

/**
 * 1. 二维数组的理解
 *
 * - 对于二维数组的理解，可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
 * - 其实，从数组底层的运行机制来看，其实没有多维数组。
 * - 概念：数组的外层元素；数组的内层元素
 *
 * 2. 二维数组的使用（6个基本点）
 * > 数组的声明和初始化
 * > 调用数组的指定元素
 * > 数组的属性：length,表示数组的长度
 * > 数组的遍历
 * > 数组元素的默认初始化值
 * > 二维数组的内存解析（难）
 *
 *
 * 3. 二维数组元素的默认初始化值
 * 3.1 动态初始化方式1：(比如：int[][] arr = new int[3][4])
 *
 * 1）外层元素，默认存储地址值。
 * 2）内层元素，默认与一维数组元素的不同类型的默认值规定相同。
 *     > 整型数组元素的默认初始化值：0
 *     > 浮点型数组元素的默认初始化值：0.0
 *     > 字符型数组元素的默认初始化值：0 (或理解为'\u0000')
 *     > boolean型数组元素的默认初始化值：false
 *     > 引用数据类型数组元素的默认初始化值：null
 *
 *
 * 3.2 动态初始化方式2：(比如：int[][] arr = new int[3][])
 * 1）外层元素，默认存储null
 * 2）内层元素，不存在的。如果调用会报错（NullPointerException）
 *
 *
 * @author kunxianli
 * @date 2024/01/31 14:26
 **/
public class TestMultiArray3 {

    public static void main(String[] args) {

//        1.1 数组的声明与初始化
        int[][] a = new int[2][];
        // 错误写法
//        a[0] = {1,2,3};
        a[0] = new int[]{1,2,3};
        a[1] = new int[]{4,5,6};

        int[][] ab = new int[2][3];
        ab[0][0] = 1;

//        1.2 方式二
        int[][] aa = new int[][]{{1,2,3},{4,5,6}};

//        1.3 其他写法
        int aab[][] = new int[][]{{1,2,3},{4,5,6}};
        int[] aabb[] = {{1,2,3},{4,5,6}};

//2 多维数组的调用
        System.out.println(a[0][1]);//2

//        代表第二个元素是数组，然后打印它的首地址
        System.out.println(a[1]); //[I@1b6d3586

// 3 数组的长度
        System.out.println(a.length); //外围数组的长度
        System.out.println(a[1].length);//内层数组的长度

//        4 遍历数组
        for(int i=0;i<a.length;i++){
            for (int j=0;j<a[i].length;j++){
                System.out.print(a[i][j]+",");
            }
            System.out.println();
        }


//        5多维数组的默认初始化
//         5.1  动态初始化方式1
        int[][] c = new int[2][2];

        System.out.println(c[1]);//外层：[I@4554617c
        System.out.println(c[1][1]);// 0

//        5.2  动态初始化方式2
        int[][] d = new int[2][];
//        外层元素，默认存储null
        System.out.println(d[1]);
//        内层元素，不存在的。如果调用会报错（NullPointerException）
//        System.out.println(d[1][0]);

    }

}
